home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
DBVGAL17.ARJ
/
VIDLIB.H
< prev
Wrap
C/C++ Source or Header
|
1992-01-25
|
8KB
|
194 lines
/* vidlib.h */
#if !defined(__LARGE__) && !defined(__HUGE__)
#error Wrong compiler model: must be large or huge
#endif
#ifndef __VIDLIB__
#define __VIDLIB__
#ifndef __STDIO_H
#include <stdio.h>
#endif
#define VIDLIB_VERSION "1.7"
#define BIOScrtmode (*((char *) 0x00000449L))
#define BIOScrtcols (*((char *) 0x0000044aL))
#define BIOScrtrows (*((char *) 0x00000484L))
#define BIOScrtpoints (*((char *) 0x00000485L))
#define BIOScrtbuflen (*((unsigned *)0x0000044cL))
#define BIOScrtstartoff (*((unsigned *)0x0000044eL))
#define BIOScursor_page1 (*((unsigned *)0x00000450L))
#define BIOScursor_page1x (*((unsigned char *)0x00000450L))
#define BIOScursor_page1y (*((unsigned char *)0x00000451L))
#define BIOScrtpage (*((char *) 0x00000462L))
#define DACSIZE 768
#define DEFAULTDAC ((char *) -1L)
#define WPlane0 0x01
#define WPlane1 0x02
#define WPlane2 0x04
#define WPlane3 0x08
#define WPlaneALL 0x0f
/******************************* Global Data **************************/
#ifdef VIDLIB /* when compiling the vidlib.c only */
char _vidinit=0;
char _olddacs[DACSIZE];
unsigned char _oldmode;
unsigned int _screen_width;
unsigned int _screen_length;
unsigned int _memory_length;
char *_screen_start;
char *_screen_end;
unsigned short _background_color=0;
unsigned short _foreground_color=0x40;
char tdbg[120];
FILE *vgadebug=NULL;
#else
extern FILE *vgadebug;
extern char _vidinit;
extern char _olddacs[DACSIZE];
extern unsigned char _oldmode;
extern unsigned int _screen_width; /* in bytes */
extern unsigned int _screen_length;
extern unsigned int _memory_length; /* in total scan lines, e.g.
modes 0x0e,0x10, and 0x12= 819,
even though a different number
are displayed in each */
extern char *_screen_start; /* Usually 0xA0000000 */
extern char *_screen_end; /* actually, the first byte after
the displayed portion */
extern unsigned short _background_color;
extern unsigned short _foreground_color;
extern char tdbg[135];
#endif /* endif VIDLIB */
#ifdef __cplusplus
extern "C" { /* allow compiling in TurboC++ mode */
#endif
int Vinit(void);
void Vclose(void);
void Vrestorestate(void *savebuffer);
void * Vsavestate(void *savebuffer);
int isVGA(void); /* returns 0 if no, 1 if yes */
void Start_vgadebug(char *path);
void Close_vgadebug(void);
int VGAmode(unsigned int mode, char *palette); /* palette may be NULL */
int Textmode(int lines); /* 25, 28, 33, 40, 50 are valid */
int _select_scanline_count(int scans);
int _select_character_points(int points);
/* the following routines make use of _screen_width, _screen_length, and
_screen_start to check for logical errors, so any changing of VGA registers
that change these attributes should be reflected in these variables */
/* area fills */
int Vfill256(unsigned dx, unsigned dy, unsigned sdx, unsigned sdy,
unsigned color);
/* video to video copy */
int Vcopy256(unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
int Vcopy16(unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
/* System memory to video copy */
int Vdisp256(unsigned dx, unsigned dy,
char *s, unsigned sw, unsigned sl,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
int Vdisp16(unsigned dx, unsigned dy,
char *s, unsigned sw, unsigned sl,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
/* Video to System memory copy */
int Vcapt256(char *d, unsigned dw, unsigned dl,
unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
int Vcapt16(char *d, unsigned dw, unsigned dl,
unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy);
/* low level routines */
void Select_RPlane(int plane);
void Select_Wmode(int mode); /* mode ranges 0-3 for VGA */
int What_Wmode(void);
void Select_WPlane(int planes); /* planes = bit mask
0=plane 0 write enable,
1=plane 1, etc. */
int SQread_reg(int reg);
void SQset_reg(int reg, int value);
void SQset_regm(int reg, int value, int bitmask);
void Vdisable_refresh(void);
void Venable_refresh(void); /* doesn't work in text mode ? */
int GCread_reg(int reg);
void GCset_reg(int reg, int value);
void GCset_regm(int reg, int value, int bitmask);
int ACread_reg(int reg);
void ACset_reg(int reg, int value);
void ACset_regm(int reg, int value, int bitmask);
#define Vborder_color(x) (ACset_reg(0x11, (x)))
int MOread_reg(void);
void MOset_reg(int value);
void MOset_regm(int value, int mask);
int CRTCread_reg(int reg);
void CRTCset_reg(int reg, int value);
void CRTCset_regm(int reg, int value, int bitmask);
void Vwait_vretrace(void);
void Vwait_hretrace(void);
void L40set(void); /* line drawing characters don't connect in this
mode */
void L33set(void);
extern unsigned char EGA12set[256][12]; /* smaller (8x12) ega-like font */
/* used in the 33 line text mode */
void ReadDACs(void *palette);
void WriteDACs(void *palette);
int LoadDACs(int fh, char *savearea); /* savearea must be DACSIZE bytes */
int SaveDACs(int fh, char *savearea);
void Load_Palette(int start, int count, char *palette);
int putstty(const char *s, int color); /* uses BIOS routine */
int Vputs(const char *s); /* calls putstty(s, _foreground_color); */
void Vgotoxy(int col, int row); /* uses BIOS routine */
/* miscellaneous utilities */
void * normalize(void *); /* convert a far pointer to a huge. */
char * memcpyb(char *dest, char *src, unsigned count);
/* garauntees one byte at a time, unlike memcpy, which will
attempt to copy by words if on a 286,386,486,etc. */
char * memcpybr(char *dest_end, char *src_end, unsigned count);
/* same as memcpyb, except a reverse direction move (bottom to top).
Note that the pointers must be to the last byte in the area. */
#ifdef _cplusplus
}
#endif
/* The following macros are normally in <dos.h> on TurboC and TurboC++ */
/* but get excluded if you compile with ANSI-keywords only. I'm changing */
/* their definition here to better compile under ANSI compilers. */
#ifdef __STDC__
#define MK_FP(seg,off)\
(normalize((void *)((unsigned long)seg << 16) + (unsigned long)off))
#define FP_OFF(fp)\
((unsigned)((unsigned long)normalize(fp) & (unsigned long)0x0000ffffL))
#define FP_SEG(fp)\
((unsigned)((unsigned long)normalize(fp)>>16))
#endif
/* endif #define __VIDLIB__ */
#endif